
 class ListNode {
      int val;
     ListNode next;
     ListNode() {
 }
   ListNode(int val) {
         this.val = val;
     }
     ListNode(int val, ListNode next) {
         this.val = val; this.next = next;
     }
public class LinkedListProblem {
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            // 1. 判定链表是否是空的.
            if (head == null) {
                return null;
            }
            // 2. 遍历链表, 找到每一个值为 val 的节点. 从 head 之后的元素开始遍历.
            ListNode prev = head;
            ListNode cur = head.next;

            while (cur != null) {
                if (cur.val == val) {
                    // 触发删除操作, 把 cur 给删掉.
                    prev.next = cur.next;
                    // 删除 cur 位置的节点之后, 需要移动 cur 指向下一个位置.
                    cur = prev.next;
                } else {
                    // 没有触发删除.
                    // 移动 prev 和 cur 的指向
                    prev = cur;
                    cur = cur.next;
                }
            }

            // 3. 最后判定头结点的删除情况
            if (head.val == val) {
                head = head.next;
            }
            return head;
        }
    }
}}
